#!/usr/bin/env python
# -*- coding: utf-8 -*-

# 注意，替换后的翻译有可能有 $s ，需要手动换成 @
# 先安装python_docx 插件， 再在confluence 导出doc翻译文件，另存为docx 文件，放在一个目录中
# 进入到该目录，执行 python translate_lzc.py

from docx import Document
import os
#import re
import sys
reload(sys)
sys.setdefaultencoding('utf-8')

def createLanguageTxt(fileName):
    
    docx = Document(fileName)
    
    # 获取文档的第一个表格
    table = docx.tables[0]
    
    # 获取表格的第一行，列出有多少语言
    titleRow = table.rows[0]
    titleList = []
    
    for langColumn in range(3,titleRow.cells.__len__()):
        titleList.append(titleRow.cells[langColumn].text)

    fileList = []

    for title in titleList:
        f=open(title + '.txt','w')
        f.truncate() #先清空文件
        fileList.append(f)

    print('\n当前翻译文件的语言有 %d 种： %s' % (len(titleList),str(titleList).replace('u\'','\'').decode("unicode-escape")))

    # 找出ios key 在表格中的第几列
    iOSKeyIndex = -1
    tmp = 0
    for cell in titleRow.cells:
        if cell.text == 'ios key':
            iOSKeyIndex = tmp
            break
        tmp = tmp + 1

    if iOSKeyIndex == -1:
       print('没找到ios key这一列，请检查翻译文件!')
       return
#    else:
#       print('ios key 在第 %d 列' % iOSKeyIndex)

    for i in range(1,table.rows.__len__()):
        key = table.rows[i].cells[iOSKeyIndex].text
        if len(key) == 1: # 没有key 则不生成
           print('第 %s 行没有iOS key，不生成该条翻译！！！' % table.rows[i].cells[0].text)
           continue
        row = table.rows[i]
        
        for j in range(3,row.cells.__len__()):
            value = row.cells[j].text
            # 有可能是安卓添加的，翻译过来可能会有以下特殊字符，都 要换成%@
            value = value.replace('%s','%@')
            value = value.replace('% s','%@')
            value = value.replace('%$s','%@')
            value = value.replace('%1$s','%@')
            value = value.replace('%2$s','%@')
            value = value.replace('%3$s','%@')
            value = value.replace('%4$s','%@')
            value = value.replace('%5$s','%@')

            value = value.replace('%1$ s','%@')
            value = value.replace('%2$ s','%@')
            value = value.replace('%3$ s','%@')
            value = value.replace('%4$ s','%@')
            value = value.replace('%5$ s','%@')

#去掉前后空格
            value = value.strip()

            fileList[j-3].write('\"' + key + '\"' + ' = ' + '\"' + value + '\"' + ';\n')

    for fileHandle in fileList:
        fileHandle.close()


    print('\n---\33[90m 正在检查没有翻译的字符串 \33[97m---')

    compareOriginalText()

    print('\n翻译替换完成！！！')


# 比较 English.txt 和 原文.txt, 得出没有翻译的文件,注意检查
def compareOriginalText():
    fobj=open('没有翻译的.txt','w')
    fobj.truncate()
    
    with open('原文.txt','r') as f:
        for line in f:
            if not line.startswith('\"Localizable'):
               continue;
            key1 = line.split(' = ')[0] #拿到原文的key
            isFind = False
            with open('English.txt','r') as obj:
                for strs in obj.readlines():
                    key2 = strs.split(' = ')[0] #拿到翻译中的key
                    if key1 == key2:
                       isFind = True
                       break;
            if not isFind:
               print('\33[91m 注意！！翻译中没有找到 \33[0m' + line.strip())
               fobj.write(line.strip()+"\n")

    fobj.close()




def main():

#获取当前文件所在文件夹的名称及所有文件
    file_dirName = os.path.dirname(os.path.realpath(__file__))
    fileNameList = os.listdir(file_dirName)

    docxName = ''
    for tmpName in fileNameList:
        if tmpName.endswith('.docx'):
           docxName = tmpName
           print('\n当前文件夹找到要翻译的文件： ' + docxName)
           break;

    if docxName.endswith('.docx'):
       createLanguageTxt(docxName)
    else:
       print('当前文件夹没有找到要翻译的docx文件!')

if __name__ == '__main__':
    main()

